#include "stm32f10x.h"                  // Device header
uint16_t My_Size;
void MyDMA_Init(uint32_t ADDrA,uint32_t ADDrB,uint16_t Size){
	My_Size=Size;
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
	
	DMA_InitTypeDef DMA_InitStructure;
	DMA_InitStructure.DMA_PeripheralBaseAddr=ADDrA;  //外设站点的起始地址
	DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;  //外设站点的数据宽度
	DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Enable;		//外设站点的是否自增
	DMA_InitStructure.DMA_MemoryBaseAddr=ADDrB;	//内设站点的起始地址
	DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;	//内设站点的数据宽度
	DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;		//内设站点的是否自增
	DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;		//传输方向:DMA_DIR_PeripheralDST：存储器站点作为目的地   DMA_DIR_PeripheralSRC:外设站点作为目的地
	DMA_InitStructure.DMA_BufferSize=Size;		//缓存区大小——传输计数器大小
	DMA_InitStructure.DMA_Mode =DMA_Mode_Normal;		//传输模式——是否使用自动重装
	DMA_InitStructure.DMA_M2M=DMA_M2M_Enable;		//选择是否是存储器到存储器——实质选择硬件触发还是软件触发
	DMA_InitStructure.DMA_Priority=DMA_Priority_Medium;		//优先级
	DMA_Init(DMA1_Channel1,&DMA_InitStructure);//第一个参数DMAy_Channelx——即选择了是哪个DMA，也选择了是哪个DMA的通道
	
	DMA_Cmd(DMA1_Channel1,DISABLE);
}

//此时我们想让DataA的数据变化，使再转运一次
void MyDMA_Tranfer(void){
	DMA_Cmd(DMA1_Channel1,DISABLE);
	
	DMA_SetCurrDataCounter(DMA1_Channel1,My_Size); 
	
	DMA_Cmd(DMA1_Channel1,ENABLE);
	
	//等待转运完成
	while(DMA_GetFlagStatus(DMA1_FLAG_TC1)==RESET);
	//手动清除标志位
	DMA_ClearFlag(DMA1_FLAG_TC1);
}